#pragma once
#include<iostream>
#include<string>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>


//工具类，提供方法
class Util
{
public:
    //读取一行内容
    static int ReadLine(int sock, std::string& out)
    {
        //按字符读取，判断最后一位字符，如果是\r就要判断后面的一个字符
        char ch = 'A';
        while('\n' != ch)
        {
            ssize_t s = recv(sock, &ch, 1, 0);//读取一个字符
            if(s > 0)
            {
                if('\r' == ch)//判断后面的一个字符
                {
                    recv(sock, &ch, 1, MSG_PEEK);//MSG_PEEK模式窥探后面一个字符，但是取走后面的字符
                    if('\n' == ch)
                    {
                        //把\r\n 变成 \n
                        recv(sock, &ch, 1, 0); // 窥探成功，取走这个字符
                    }
                    else
                    {
                        ch = '\n';//后面不是\n，说明是下一行开头，我们把\r变成\n
                    }
                }
                //走到下面来的
                //1.普通字符
                //2.\n
                out.push_back(ch);
            }
            else if(s == 0)
                return 0;//对端关闭
            else
                return -1;
        }
        return out.size();
    }
    static bool CutString(const std::string &target, std::string& sub1_out, std::string& sub2_out, std::string sep)
    {
        //sep：分隔符[一般是:和空格]
        size_t pos = target.find(sep);
        if(pos != std::string::npos)
        {
            sub1_out = target.substr(0, pos);
            sub2_out = target.substr(pos+sep.size());//截取到字符串结束
            return true;
        }
        return false;
    }
};